package com.guodi.model.service;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.guodi.core.tool.api.R;
import com.guodi.model.entity.ApiIdtFillTask;
import com.guodi.model.entity.IdtFillTask;
import com.baomidou.mybatisplus.extension.service.IService;
import com.guodi.model.entity.IdtFillTaskOpinion;
import com.guodi.model.vo.ApiIndicatorsFillTaskVo;

import javax.servlet.http.HttpServletResponse;
import java.util.List;
import java.util.Map;


/**
* 指标填报任务表  服务类接口
* @author lzy
* @date 2023-05-08
*/
public interface IIdtFillTaskService extends IService<IdtFillTask> {

    /**
     * @描述: 下发任务
     * @入参:
     * @出参:
     * @作者: lzy
     * @日期: 2023/5/8 15:14
     **/
    void iSSueTask(String year, List<String> divisions, String endTime);

    /**
     * @描述: 根据行政区级别统计任务各状态数量
     * @入参:
     * @出参:
     * @作者: lzy
     * @日期: 2023/5/22 15:10
     **/
    List listCountByCityLevel(String year);

    /**
     * @描述: 获取任务完成情况
     * @入参:
     * @出参:
     * @作者: lzy
     * @日期: 2023/5/8 16:14
     **/
    IPage<ApiIdtFillTask> listByCondition(Page page, String year, int codeLength);

    /**
     * @描述: 根据任务id获取相对应指标体系
     * @入参:
     * @出参:
     * @作者: lzy
     * @日期: 2023/5/9 10:51
     **/
    Map<String,List<ApiIndicatorsFillTaskVo>> getIndicatorsDirByTaskId(String taskId);

    /**
     * @描述: 确认任务
     * @入参:
     * @出参:
     * @作者: lzy
     * @日期: 2023/5/10 11:34
     **/
    R confirmByTaskId(String taskId);

    /**
     * @描述: 驳回任务
     * @入参:
     * @出参:
     * @作者: lzy
     * @日期: 2023/5/10 11:45
     **/
    R rejectByTaskId(String taskId, String message);

    /**
     * @描述: 催办任务
     * @入参:
     * @出参:
     * @作者: lzy
     * @日期: 2023/5/10 14:17
     **/
    R urgingByTaskId(String taskId);

    /**
     * @描述: 提交任务
     * @入参:
     * @出参:
     * @作者: lzy
     * @日期: 2023/5/10 14:37
     **/
    R submitByTaskId(String taskId);

    /**
     * @描述: 待审核任务
     * @入参:
     * @出参:
     * @作者: lzy
     * @日期: 2023/5/22 16:29
     **/
    IPage<IdtFillTask> auditTask(Page page, String year);

    /**
     * @描述: 已审核任务
     * @入参:
     * @出参:
     * @作者: lzy
     * @日期: 2023/5/22 17:09
     **/
    IPage<IdtFillTask> CheckedTask(Page page, String year);

    /**
     * @描述: 待填报任务
     * @入参:
     * @出参:
     * @作者: lzy
     * @日期: 2023/5/22 17:25
     **/
    R waitFilledList(String year, String regionCode);

    /**
     * @描述: 待确认任务
     * @入参:
     * @出参:
     * @作者: lzy
     * @日期: 2023/5/22 17:39
     **/
    R waitConfirmList(String year, String regionCode);

    /**
     * @描述: 校验是否有提交权限
     * @入参:
     * @出参:
     * @作者: lzy
     * @日期: 2023/5/22 17:59
     **/
    boolean verifySubmit(IdtFillTask task);

    /**
     * @描述: 待评估任务
     * @入参:
     * @出参:
     * @作者: lzy
     * @日期: 2023/5/22 18:18
     **/
    IPage<IdtFillTask> estimateList(Page page, String year, String regionCode);

    /**
     * @描述: 已办结任务
     * @入参:
     * @出参:
     * @作者: lzy
     * @日期: 2023/5/22 18:26
     **/
    IPage<IdtFillTask> completedList(Page page, String year, String regionCode);

    /**
     * @描述: 修改任务的状态
     * @入参:
     * @出参:
     * @作者: lzy
     * @日期: 2023/5/23 11:43
     **/
    boolean editStatus(String taskId, String status);

    /**
     * @描述: 下载报告
     * @入参:
     * @出参:
     * @作者: lzy
     * @日期: 2023/5/24 14:20
     **/
    R downloadReportFile(String taskId, HttpServletResponse response);

    /**
     * @描述: 获取意见
     * @入参:
     * @出参:
     * @作者: lzy
     * @日期: 2023/5/31 17:48
     **/
    List<IdtFillTaskOpinion> getOptionsByTask(String year, String divisionCode);

    /**
     * @描述: 通过年份和行政区划编码查询体检任务
     * @入参:
     * @出参:
     * @作者: lzy
     * @日期: 2023/8/21 14:31
     **/
    IdtFillTask getTaskByYearAndCode(String year, String divisionCode);
}
